/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#pragma once

#include <inttypes.h>

#ifdef __cplusplus
extern "C" {
#endif

// OUI
static const uint32_t EXP_ID_NICIRA = 0x002320;    // Nicira Networks
static const uint32_t EXP_ID_BSN = 0x5c16c7;       // Big Switch Networks
static const uint32_t EXP_ID_VELLO = 0xB0D2F5;     // Vello Systems
static const uint32_t EXP_ID_HP = 0x002481;        // HP
static const uint32_t EXP_ID_HPLABS = 0x0004EA;    // HP-Labs
static const uint32_t EXP_ID_BLOX = 0x748771;      // Infoblox Inc
static const uint32_t EXP_ID_ONL = 0xA42305;       // Open Networking Laboratory
static const uint32_t EXP_ID_FSL = 0x00049F;       // Freescale
static const uint32_t EXP_ID_NETRONOME = 0x00154D; // Netronome
static const uint32_t EXP_ID_BCM = 0x001018;       // Broadcom
static const uint32_t EXP_ID_PMCS = 0x00E004;      // PMC-Sierra

// ONF
static const uint32_t ONF_EXP_ID_ONF = 0x4F4E4600; // ONF Extensions
static const uint32_t ONF_EXP_ID_BME =
    0xff000001; // Budapest University of Technology and Economics
static const uint32_t ONF_EXP_ID_NF = 0xff000002; // NoviFlow
static const uint32_t ONF_EXP_ID_L3 =
    0xff000003; // L3+ Extensions (Vendor Neutral)
static const uint32_t ONF_EXP_ID_L47 = 0xff000004; // L4-L7 Extensions
static const uint32_t ONF_EXP_ID_WM =
    0xff000005; // Wireless and Mobility Extensions
static const uint32_t ONF_EXP_ID_FA =
    0xff000006; // Forwarding Abstractions Extensions
static const uint32_t ONF_EXP_ID_OT = 0xff000007; // Open Transport Extensions
static const uint32_t ONF_EXP_ID_NBL =
    0xff000008; // Network Benchmarking Lab, National Chiao Tung University
static const uint32_t ONF_EXP_ID_MPC =
    0xff000009; // Mobile Packet Core Extensions

// OXM Classes
static const uint32_t ONF_OXM_CLASS_NICIRA0 =
    0x0000; // NXM compatibility - Nicira Networks
static const uint32_t ONF_OXM_CLASS_NICIRA1 =
    0x0001; // NXM compatibility - Nicira Networks
static const uint32_t ONF_OXM_CLASS_BSN = 0x0003;       // Big Switch Networks
static const uint32_t ONF_OXM_CLASS_HP = 0x0004;        // HP
static const uint32_t ONF_OXM_CLASS_FSL = 0x0005;       // Freescale
static const uint32_t ONF_OXM_CLASS_NETRONOME = 0x0006; // Netronome
static const uint32_t ONF_OXM_CLASS_ONL =
    0x0007; // Open Networking Lab (ON.Lab)
static const uint32_t ONF_OXM_CLASS_BLOX = 0x0008; // Infoblox
static const uint32_t ONF_OXM_CLASS_BCM = 0x0009;  // Broadcom
static const uint32_t ONF_OXM_CLASS_PMCS = 0x000A; // PMC-Sierra

/* OF-DPA Experimenter Match Field types */
enum ofdpa_match_exp_type {
  OFDPA_OXM_VRF = 1,
  OFDPA_OXM_TRAFFIC_CLASS = 2,
  OFDPA_OXM_COLOR = 3,
  OFDPA_OXM_VLAN_DEI = 4,
  OFDPA_OXM_QOS_INDEX = 5,
  OFDPA_OXM_LMEP_ID = 6,
  OFDPA_OXM_MPLS_TTL = 7,
  OFDPA_OXM_MPLS_L2_PORT = 8,
  OFDPA_OXM_L3_IN_PORT = 9,
  OFDPA_OXM_OVID = 10,
  OFDPA_OXM_MPLS_DATA_FIRST_NIBBLE = 11,
  OFDPA_OXM_MPLS_ACH_CHANNEL = 12,
  OFDPA_OXM_NEXT_LABEL_IS_GAL = 13,
  OFDPA_OXM_OAM_Y1731_MDL = 14,
  OFDPA_OXM_OAM_Y1731_OPCODE = 15,
  OFDPA_OXM_COLOR_ACTIONS_INDEX = 16,
  OFDPA_OXM_PROTECTION_INDEX = 21,
  OFDPA_OXM_MPLS_TYPE = 23,
  OFDPA_OXM_ALLOW_VLAN_TRANSLATION = 24,
  OFDPA_OXM_ACTSET_OUTPUT = 43,
};

/* Flow Table Id enumerator */
typedef enum {
  OFDPA_FLOW_TABLE_ID_INGRESS_PORT = 0,      /**< Ingress Port Table */
  OFDPA_FLOW_TABLE_ID_PORT_DSCP_TRUST = 5,   /**< Port DSCP Trust Table */
  OFDPA_FLOW_TABLE_ID_PORT_PCP_TRUST = 6,    /**< Port PCP Trust Table */
  OFDPA_FLOW_TABLE_ID_TUNNEL_DSCP_TRUST = 7, /**< Tunnel DSCP Trust Table */
  OFDPA_FLOW_TABLE_ID_TUNNEL_PCP_TRUST = 8,  /**< Tunnel PCP Trust Table */
  OFDPA_FLOW_TABLE_ID_INJECTED_OAM = 9,      /**< Injected OAM Table */
  OFDPA_FLOW_TABLE_ID_VLAN = 10,             /**< VLAN Table */
  OFDPA_FLOW_TABLE_ID_VLAN_1 = 11,           /**< VLAN 1 Table */
  OFDPA_FLOW_TABLE_ID_MAINTENANCE_POINT =
      12,                                /**< Maintenance Point Flow Table */
  OFDPA_FLOW_TABLE_ID_MPLS_L2_PORT = 13, /**< MPLS L2 Port Table */
  OFDPA_FLOW_TABLE_ID_MPLS_DSCP_TRUST =
      15,                                  /**< MPLS L2 Port DSCP Trust Table */
  OFDPA_FLOW_TABLE_ID_MPLS_PCP_TRUST = 16, /**< MPLS L2 Port PCP Trust Table */
  OFDPA_FLOW_TABLE_ID_MPLS_QOS_CLASS = 17, /**< MPLS L2 Port QoS Class Table */
  OFDPA_FLOW_TABLE_ID_L2_POLICER = 18,     /**< L2 Policer */
  OFDPA_FLOW_TABLE_ID_L2_POLICER_ACTIONS = 19, /**< L2 Policer Actions */
  OFDPA_FLOW_TABLE_ID_TERMINATION_MAC = 20,    /**< Termination MAC Table */
  OFDPA_FLOW_TABLE_ID_L3_TYPE = 21,            /**< L3 Type Table */
  OFDPA_FLOW_TABLE_ID_MPLS_0 = 23,             /**< MPLS 0 Table */
  OFDPA_FLOW_TABLE_ID_MPLS_1 = 24,             /**< MPLS 1 Table */
  OFDPA_FLOW_TABLE_ID_MPLS_2 = 25,             /**< MPLS 2 Table */
  OFDPA_FLOW_TABLE_ID_MPLS_MAINTENANCE_POINT =
      26, /**< MPLS-TP Maintenance Point Flow Table */
  OFDPA_FLOW_TABLE_ID_MPLS_L3_TYPE = 27,     /**< MPLS L3 Type Flow Table */
  OFDPA_FLOW_TABLE_ID_MPLS_LABEL_TRUST = 28, /**< MPLS Label Trust Flow Table */
  OFDPA_FLOW_TABLE_ID_MPLS_TYPE = 29,        /**< MPLS Type Flow Table */
  OFDPA_FLOW_TABLE_ID_UNICAST_ROUTING = 30,  /**< Unicast Routing Table */
  OFDPA_FLOW_TABLE_ID_MULTICAST_ROUTING = 40,   /**< Multicast Routing Table */
  OFDPA_FLOW_TABLE_ID_BRIDGING = 50,            /**< Bridging Table */
  OFDPA_FLOW_TABLE_ID_ACL_POLICY = 60,          /**< ACL Table */
  OFDPA_FLOW_TABLE_ID_COLOR_BASED_ACTIONS = 65, /**< Color Based Actions */
  OFDPA_FLOW_TABLE_ID_EGRESS_VLAN = 210,        /**< Egress VLAN Table */
  OFDPA_FLOW_TABLE_ID_EGRESS_VLAN_1 = 211,      /**< Egress VLAN 1 Table */
  OFDPA_FLOW_TABLE_ID_EGRESS_MAINTENANCE_POINT =
      226, /**< Egress Maintenance Point Flow Table */
  OFDPA_FLOW_TABLE_ID_EGRESS_DSCP_PCP_REMARK =
      230, /**< Egress DSCP PCP Remark Flow Table */
  OFDPA_FLOW_TABLE_ID_EGRESS_TPID = 235, /**< Egress TPID Flow Table */
} OFDPA_FLOW_TABLE_ID_t;

/** Source MAC Lookup Table */
#define OFDPA_FLOW_TABLE_ID_SA_LOOKUP 254

enum OFDPA_FLOW_TABLE_ID_FMT_INGRESS_PORT {
  OFDPA_FTT_INGRESS_PORT_NORMAL_ETHERNET_IPV4_DSCP,
  OFDPA_FTT_INGRESS_PORT_NORMAL_ETHERNET_IPV6_DSCP,
  OFDPA_FTT_INGRESS_PORT_NORMAL_ETHERNET_PCP,
  OFDPA_FTT_INGRESS_PORT_NORMAL_ETHERNET,
  OFDPA_FTT_INGRESS_PORT_OVERLAY_TUNNEL_IPV4_DSCP,
  OFDPA_FTT_INGRESS_PORT_OVERLAY_TUNNEL_IPV6_DSCP,
  OFDPA_FTT_INGRESS_PORT_OVERLAY_TUNNEL_PCP,
  OFDPA_FTT_INGRESS_PORT_OVERLAY_TUNNEL,
  OFDPA_FTT_INGRESS_PORT_OAM_PDU_INJECTION,
};

enum OFDPA_FLOW_TABLE_ID_FMT_PORT_DSCP_TRUST {
  OFDPA_FTT_PORT_DSCP_TRUST_TRUST_CLASSIFICATION_IPV4,
  OFDPA_FTT_PORT_DSCP_TRUST_TRUST_CLASSIFICATION_IPV6,
};

enum OFDPA_FLOW_TABLE_ID_FMT_PORT_PCP_TRUST {
  OFDPA_FTT_PORT_PCP_TRUST_TRUST_CLASSIFICATION,
};

enum OFDPA_FLOW_TABLE_ID_FMT_TUNNEL_PCP_TRUST {
  OFDPA_FTT_TUNNEL_PCP_TRUST_TRUST_CLASSIFICATION,
};

enum OFDPA_FLOW_TABLE_ID_FMT_TUNNEL_DSCP_TRUST {
  OFDPA_FTT_TUNNEL_DSCP_TRUST_TRUST_CLASSIFICATION_IPV4,
  OFDPA_FTT_TUNNEL_DSCP_TRUST_TRUST_CLASSIFICATION_IPV6,
};

enum OFDPA_FLOW_TABLE_ID_FMT_INJECTED_OAM {
  OFDPA_FTT_INJECTED_OAM_ETHERNET_SERVICE_UP_MEP_OR_MHF_PROACTIVE_PM_COUNT,
  OFDPA_FTT_INJECTED_OAM_ETHERNET_SERVICE_UP_MEP_OR_MHF,
  OFDPA_FTT_INJECTED_OAM_ETHERNET_SERVICE_DOWN_MEP_OR_MHF,
  OFDPA_FTT_INJECTED_OAM_SECTION_PROACTIVE_PM_COUNT,
  OFDPA_FTT_INJECTED_OAM_SECTION,
  OFDPA_FTT_INJECTED_OAM_LSP_MEP_OR_MIP_PROACTIVE_PM_COUNT,
  OFDPA_FTT_INJECTED_OAM_LSP_MEP_OR_MIP,
  OFDPA_FTT_INJECTED_OAM_PW_VCCV_TYPE_1_OR_3_PROACTIVE_PM_COUNT,
  OFDPA_FTT_INJECTED_OAM_PW_VCCV_TYPE_1_OR_3,
  OFDPA_FTT_INJECTED_OAM_PW_VCCV_TYPE_4_1,
  OFDPA_FTT_INJECTED_OAM_PW_VCCV_TYPE_4_2,
};

enum OFDPA_FLOW_TABLE_ID_FMT_VLAN {
  OFDPA_FTT_VLAN_VLAN_FILTERING,
  OFDPA_FTT_VLAN_VLAN_ASSIGNMENT_UNTAGGED_PORT_VLAN_ASSIGNMENT,
  OFDPA_FTT_VLAN_VLAN_ASSIGNMENT_PRIORITY_TAGGED_PORT_VLAN_ASSIGNMENT,
  OFDPA_FTT_VLAN_VLAN_ALLOW_ALL,
  OFDPA_FTT_VLAN_VLAN_TRANSLATE_SINGLE_TAG_OR_SINGLE_TAG_TO_DOUBLE_TAG,
  OFDPA_FTT_VLAN_VLAN_TRANSLATE_DOUBLE_TAG,
  OFDPA_FTT_VLAN_MPLS_L2_SINGLE_TAG_TRANSLATE,
  OFDPA_FTT_VLAN_MPLS_L2_DOUBLE_TAG_TRANSLATE,
  OFDPA_FTT_VLAN_MPLS_L2_UNTAGGED_,
  OFDPA_FTT_VLAN_MPLS_L2_PRIORITY_TAGGED,
  OFDPA_FTT_VLAN_MPLS_L2_ALL_TRAFFIC_ON_PORT,
  OFDPA_FTT_VLAN_VLAN_CROSS_CONNECT_SINGLE_TAGGED,
  OFDPA_FTT_VLAN_VLAN_CROSS_CONNECT_DOUBLE_TAGGED,
};

enum OFDPA_FLOW_TABLE_ID_FMT_VLAN_1 {
  OFDPA_FTT_VLAN_1_STACKED_VLAN_ASSIGNMENT,
  OFDPA_FTT_VLAN_1_MPLS_L2_STACKED_VLAN,
  OFDPA_FTT_VLAN_1_VLAN_CROSS_CONNECT_TWO_VLANS,
};

enum OFDPA_FLOW_TABLE_ID_FMT_INGRESS_MAINTENANCE_POINT {
  OFDPA_FTT_INGRESS_MAINTENANCE_POINT_DOWN_MHF_LBM_PROCESS_CLIENT_MDL,
  OFDPA_FTT_INGRESS_MAINTENANCE_POINT_DOWN_MHF_LTM_PROCESS_CLIENT_MDL,
  OFDPA_FTT_INGRESS_MAINTENANCE_POINT_PDU_PROCESS_OUR_MDL,
  OFDPA_FTT_INGRESS_MAINTENANCE_POINT_PDU_PASSTHRU_HIGHER_MDL,
  OFDPA_FTT_INGRESS_MAINTENANCE_POINT_PDU_DROP_LOWER_MDL,
  OFDPA_FTT_INGRESS_MAINTENANCE_POINT_MEP_DATA,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_L2_PORT {
  OFDPA_FTT_MPLS_L2_PORT_MPLS_V4_DSCP,
  OFDPA_FTT_MPLS_L2_PORT_MPLS_V6_DSCP,
  OFDPA_FTT_MPLS_L2_PORT_MPLS_PCP,
  OFDPA_FTT_MPLS_L2_PORT_VPWS,
  OFDPA_FTT_MPLS_L2_PORT_VLAN_CROSS_CONNECT,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_L2_PORT_DSCP_TRUST {
  OFDPA_FTT_MPLS_L2_PORT_DSCP_TRUST_IPV4_TRUST_CLASSIFICATION,
  OFDPA_FTT_MPLS_L2_PORT_DSCP_TRUST_IPV6_TRUST_CLASSIFICATION,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_L2_PORT_PCP_TRUST {
  OFDPA_FTT_MPLS_L2_PORT_PCP_TRUST_MPLSTP_TRUST_CLASSIFICATION,
};

enum OFDPA_FLOW_TABLE_ID_FMT_TERMINATION_MAC {
  OFDPA_FTT_TERMINATION_MAC_IPV4_UNICAST_MAC,
  OFDPA_FTT_TERMINATION_MAC_IPV6_UNICAST_MAC,
  OFDPA_FTT_TERMINATION_MAC_IPV4_MULTICAST_MAC,
  OFDPA_FTT_TERMINATION_MAC_IPV6_MULTICAST_MAC,
  OFDPA_FTT_TERMINATION_MAC_MPLS,
};

enum OFDPA_FLOW_TABLE_ID_FMT_L3_TYPE {};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_0 {
  OFDPA_FTT_MPLS_0_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_NO_MEP,
  OFDPA_FTT_MPLS_0_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_MEP_DATA,
  OFDPA_FTT_MPLS_0_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_MEP_CONTROL,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_1 {
  OFDPA_FTT_MPLS_1_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL,
  OFDPA_FTT_MPLS_1_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_THIS_LABEL_PHP,
  OFDPA_FTT_MPLS_1_SWAP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_THIS_LABEL,
  OFDPA_FTT_MPLS_1_SWAP_PW_LABEL_AND_FORWARD_BASED_ON_THIS_LABEL,
  OFDPA_FTT_MPLS_1_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_LSP_MEP_DATA,
  OFDPA_FTT_MPLS_1_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_LSP_MEP_CONTROL,
  OFDPA_FTT_MPLS_1_SWAP_TUNNEL_LABEL_LSP_OAM_MIP_CONTROL,
  OFDPA_FTT_MPLS_1_SWAP_PW_LABEL_MSPW_OAM_MIP_CONTROL,
  OFDPA_FTT_MPLS_1_L2_SWITCH_PW_TERMINATE,
  OFDPA_FTT_MPLS_1_PW_VCCV_4_PW_TERMINATE_OAM_MEP_CONTROL,
  OFDPA_FTT_MPLS_1_PW_VCCV_1_PW_TERMINATE_OAM_MEP_CONTROL,
  OFDPA_FTT_MPLS_1_PW_VCCV_3_OAM_MIP_CONTROL,
  OFDPA_FTT_MPLS_1_SECTION_OAM,
  OFDPA_FTT_MPLS_1_L3_VPN_ROUTE,
  OFDPA_FTT_MPLS_1_L3_VPN_FORWARD,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_2 {
  OFDPA_FTT_MPLS_2_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL,
  OFDPA_FTT_MPLS_2_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_THIS_LABEL_PHP,
  OFDPA_FTT_MPLS_2_SWAP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_THIS_LABEL,
  OFDPA_FTT_MPLS_2_SWAP_PW_LABEL_AND_FORWARD_BASED_ON_THIS_LABEL,
  OFDPA_FTT_MPLS_2_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_LSP_MEP_DATA,
  OFDPA_FTT_MPLS_2_POP_TUNNEL_LABEL_AND_FORWARD_BASED_ON_NEXT_LABEL_LSP_MEP_CONTROL,
  OFDPA_FTT_MPLS_2_SWAP_TUNNEL_LABEL_LSP_OAM_MIP_CONTROL,
  OFDPA_FTT_MPLS_2_SWAP_PW_LABEL_MSPW_OAM_MIP_CONTROL,
  OFDPA_FTT_MPLS_2_L2_SWITCH_PW_TERMINATE,
  OFDPA_FTT_MPLS_2_PW_VCCV_4_PW_TERMINATE_OAM_MEP_CONTROL,
  OFDPA_FTT_MPLS_2_PW_VCCV_1_PW_TERMINATE_OAM_MEP_CONTROL,
  OFDPA_FTT_MPLS_2_PW_VCCV_3_OAM_MIP_CONTROL,
  OFDPA_FTT_MPLS_2_SECTION_OAM,
  OFDPA_FTT_MPLS_2_L3_VPN_ROUTE,
  OFDPA_FTT_MPLS_2_L3_VPN_FORWARD,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_LABEL_TRUST {
  OFDPA_FTT_MPLS_LABEL_TRUST_MPLSTP_TRUST,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_TYPE {};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLSTP_MAINTENANCE_POINT {
  OFDPA_FTT_MPLSTP_MAINTENANCE_POINT_MEP_PDU_PROCESS_G_8113_1,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MPLS_L3_TYPE {};

enum OFDPA_FLOW_TABLE_ID_FMT_UNICAST_ROUTING {
  OFDPA_FTT_UNICAST_ROUTING_IPV4_UNICAST_HOST,
  OFDPA_FTT_UNICAST_ROUTING_IPV4_UNICAST_LPM,
  OFDPA_FTT_UNICAST_ROUTING_IPV6_UNICAST_HOST,
  OFDPA_FTT_UNICAST_ROUTING_IPV6_UNICAST_LPM,
};

enum OFDPA_FLOW_TABLE_ID_FMT_MULTICAST_ROUTING {
  OFDPA_FTT_MULTICAST_ROUTING_IPV4_MULTICAST,
  OFDPA_FTT_MULTICAST_ROUTING_IPV6_MULTICAST,
  OFDPA_FTT_MULTICAST_ROUTING_IPV4_MULTICAST_MPLS_L3_VPN,
  OFDPA_FTT_MULTICAST_ROUTING_IPV6_MULTICAST_MPLS_L3_VPN,
};

enum OFDPA_FLOW_TABLE_ID_FMT_BRIDGING {
  OFDPA_FTT_BRIDGING_UNICAST_VLAN,
  OFDPA_FTT_BRIDGING_MULTICAST_VLAN,
  OFDPA_FTT_BRIDGING_DLF_VLAN,
  OFDPA_FTT_BRIDGING_UNICAST_OVERLAY,
  OFDPA_FTT_BRIDGING_MULTICAST_OVERLAY,
  OFDPA_FTT_BRIDGING_DLF_OVERLAY,
};

enum OFDPA_FLOW_TABLE_ID_FMT_L2_POLICER {
  OFDPA_FTT_L2_POLICER_MPLS_L2_PORT_METER,
};

enum OFDPA_FLOW_TABLE_ID_FMT_L2_POLICER_ACTIONS {
  OFDPA_FTT_L2_POLICER_ACTIONS_GREEN_ACTIONS,
  OFDPA_FTT_L2_POLICER_ACTIONS_YELLOW_ACTIONS,
  OFDPA_FTT_L2_POLICER_ACTIONS_RED_ACTIONS,
};

enum OFDPA_FLOW_TABLE_ID_FMT_POLICY_ACL {
  OFDPA_FTT_POLICY_ACL_IPV6_VLAN,
  OFDPA_FTT_POLICY_ACL_IPV6_OVERLAY,
  OFDPA_FTT_POLICY_ACL_IPV6_MPLSTP,
  OFDPA_FTT_POLICY_ACL_IPV4_VLAN,
  OFDPA_FTT_POLICY_ACL_IPV4_OVERLAY,
  OFDPA_FTT_POLICY_ACL_IPV4_MPLSTP,
};

enum OFDPA_FLOW_TABLE_ID_FMT_COLOR_BASED_ACTIONS {
  OFDPA_FTT_COLOR_BASED_ACTIONS_GREEN_ACTIONS,
  OFDPA_FTT_COLOR_BASED_ACTIONS_YELLOW_ACTIONS,
  OFDPA_FTT_COLOR_BASED_ACTIONS_RED_ACTIONS,
};

enum OFDPA_FLOW_TABLE_ID_FMT_EGRESS_VLAN {
  OFDPA_FTT_EGRESS_VLAN_MPLS_TERMINATE_VLAN_TRANSLATE_SINGLE_TAG_OPTIONAL_MIP_AND_OR_MEP,
  OFDPA_FTT_EGRESS_VLAN_MPLS_TERMINATE_VLAN_TRANSLATE_UNTAGGED_OPTIONAL_MIP_AND_OR_MEP,
  OFDPA_FTT_EGRESS_VLAN_MPLS_TERMINATE_VLAN_TRANSLATE_PRIORITY_TAGGED_OPTIONAL_MIP_AND_OR_MEP,
  OFDPA_FTT_EGRESS_VLAN_MPLS_TERMINATE_VLAN_TRANSLATE_ALL_TRAFFIC_ON_PORT_OPTIONAL_MIP_AND_OR_MEP,
  OFDPA_FTT_EGRESS_VLAN_VLAN_TRANSLATE_SINGLE_TAG,
  OFDPA_FTT_EGRESS_VLAN_VLAN_TRANSLATE_UNTAGGED,
  OFDPA_FTT_EGRESS_VLAN_VLAN_TRANSLATE_PRIORITY_TAGGED,
  OFDPA_FTT_EGRESS_VLAN_VLAN_TRANSLATE_ALL_TRAFFIC_ON_PORT,
  OFDPA_FTT_EGRESS_VLAN_VLAN_TRANSLATE_DOUBLE_TAG,
  OFDPA_FTT_EGRESS_VLAN_MIP_AND_OR_MEP,
};

enum OFDPA_FLOW_TABLE_ID_FMT_EGRESS_VLAN_1 {
  OFDPA_FTT_EGRESS_VLAN_1_VLAN_TRANSLATE_DOUBLE_TO_SINGLE_OR_DOUBLE,
};

enum OFDPA_FLOW_TABLE_ID_FMT_EGRESS_MAINTENANCE_POINT {
  OFDPA_FTT_EGRESS_MAINTENANCE_POINT_UP_MHF_PDU_PROCESS_LBM,
  OFDPA_FTT_EGRESS_MAINTENANCE_POINT_UP_MHF_PDU_PROCESS_OUR_LTM,
  OFDPA_FTT_EGRESS_MAINTENANCE_POINT_PDU_PROCESS_OUR_MDL,
  OFDPA_FTT_EGRESS_MAINTENANCE_POINT_PDU_PASSTHROUGH_HIGHER_MDL,
  OFDPA_FTT_EGRESS_MAINTENANCE_POINT_PDU_DROP_LOWER_MDL,
  OFDPA_FTT_EGRESS_MAINTENANCE_POINT_DATA_PASSTHOUGH_PROVIDER_UP_MEP_RX_FROM_PARTNER_AND_OR_CFM_DOWN_MEP_TX_TO_PARTNER,
};

enum OFDPA_FLOW_TABLE_ID_FMT_EGRESS_DSCP_PCP_REMARK {
  OFDPA_FTT_EGRESS_DSCP_PCP_REMARK_REMARK_PCP_DSCP_IPV_4,
  OFDPA_FTT_EGRESS_DSCP_PCP_REMARK_REMARK_PCP_DSCP_IPV6,
  OFDPA_FTT_EGRESS_DSCP_PCP_REMARK_REMARK_PCP,
};

enum OFDPA_FLOW_TABLE_ID_FMT_EGRESS_TPID {
  OFDPA_FTT_EGRESS_TPID_STAG,
};

#ifdef __cplusplus
}
#endif
